package com.github_Dididipapa.shortlink.admin.common.result;


import com.github_Dididipapa.shortlink.admin.common.enums.BaseErrorCode;
import com.github_Dididipapa.shortlink.admin.common.exception.AbstractException;

import java.util.Optional;


/**
 * @description: 全局响应结果构造类
 * @author: dididi_papa
 * @email: mitis1624087624@gmail.com
 * @date: 2025/09/06  15:25
 */

public final class Rs {

    /**
     * 构造成功响应
     */
    public static R<Void> success() {
        return new R<Void>()
                .setCode(R.SUCCESS_CODE);
    }

    /**
     * 构造带返回数据的成功响应
     */
    public static <T> R<T> success(T data) {
        return new R<T>()
                .setCode(R.SUCCESS_CODE)
                .setData(data);
    }

    /**
     * 构建服务端失败响应
     */
    public static R<Void> failure() {
        return new R<Void>()
                .setCode(BaseErrorCode.SERVICE_ERROR.code())
                .setMessage(BaseErrorCode.SERVICE_ERROR.message());
    }

    /**
     * 通过 {@link AbstractException} 构建失败响应
     */
    public static R<Void> failure(AbstractException abstractException) {
        String errorCode = Optional.ofNullable(abstractException.getErrorCode())
                .orElse(BaseErrorCode.SERVICE_ERROR.code());
        String errorMessage = Optional.ofNullable(abstractException.getErrorMessage())
                .orElse(BaseErrorCode.SERVICE_ERROR.message());
        return new R<Void>()
                .setCode(errorCode)
                .setMessage(errorMessage);
    }

    /**
     * 通过 errorCode、errorMessage 构建失败响应
     */
    public static R<Void> failure(String errorCode, String errorMessage) {
        return new R<Void>()
                .setCode(errorCode)
                .setMessage(errorMessage);
    }
}
